package org.shj.pattern.builder;

/**
 * 建造者模式： 将一个复杂对象的构建与它的表示分离， 使得同样的构建过程可以创建不同的表示
 * 主要用于创建一些复杂的对象，这些对象内部构建间的建造顺序通常是稳定的，但对象内部的构建通常面临着复杂的变化
 * 
 * 优点： 1. 建造者独立，易扩展   2. 便于控制细节风险
 * 缺点： 1. 产品必须有共同点，范围有限制   2. 内部变化复杂，会有很多的建造类
 * 使用场景： 1. 需要生成的对象具有复杂的内部结构。  2. 需要生成的对象内部属性本身相互依赖
 * 注意事项： 与工厂模式的区别是： 建造者模式更加关注与零件装配的顺序
 * 
 * Builder -- 建造Product的抽象类
 * Director -- 建造Product的过程
 * @author huangjian
 *
 */
public class Main {

	public static void main(String[] args){
		Director d = new Director();
		Builder b1 = new ConcreteBuilderA();
		Builder b2 = new ConcreteBuilderB();
		
		d.construct(b1);
		Product p1 = b1.getResult();
		p1.show();
		
		d.construct(b2);
		Product p2 = b2.getResult();
		p2.show();
	}
	

}
